package com.xique.park.service.service;

import java.util.List;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xique.park.bean.domain.ParkCarMngtype;
import com.xique.park.bean.request.web.mngType.MngTypeListRequest;
import com.xique.park.bean.vo.web.mngType.ParkCarMngTypeWebVo;

/**
 * 车辆管理类型Service接口
 *
 * @author xique
 * @date 2021-12-09
 */
public interface IParkCarMngtypeService extends IService<ParkCarMngtype> {

    /**
     * 查询车辆管理类型
     *
     * @param id 车辆管理类型ID
     * @return 车辆管理类型
     */
    ParkCarMngtype selectParkCarMngtypeById(Long id);

    /**
     * 查询车辆管理类型列表
     *
     * @param parkCarMngtype 车辆管理类型
     * @return 车辆管理类型集合
     */
    List<ParkCarMngtype> selectParkCarMngtypeList(ParkCarMngtype parkCarMngtype);

    /**
     * 批量查询
     *
     * @param ids 车辆管理类型ID
     * @return 车辆管理类型列表
     */
    List<ParkCarMngtype> selectBatchIds(List<Long> ids);

    /**
     * 查询管理类型列表 --分页
     *
     * @param search 查询条件
     * @return 分页查询结果
     */
    IPage<ParkCarMngtype> selectParkCarMngTypePage(MngTypeListRequest search);

    /**
     * 新增车辆管理类型
     *
     * @param parkCarMngtype 车辆管理类型
     * @return 结果
     */
    int insertParkCarMngtype(ParkCarMngtype parkCarMngtype);

    /**
     * 修改车辆管理类型
     *
     * @param parkCarMngtype 车辆管理类型
     * @return 结果
     */
    int updateParkCarMngtype(ParkCarMngtype parkCarMngtype);

    /**
     * 批量删除车辆管理类型
     *
     * @param ids 需要删除的车辆管理类型ID
     * @return 结果
     */
    int deleteParkCarMngtypeByIds(List<Long> ids);

    /**
     * 删除车辆管理类型信息
     *
     * @param id 车辆管理类型ID
     * @return 结果
     */
    int deleteParkCarMngtypeById(Long id);

    /**
     * 管理类型连表分页查询
     *
     * @param page   分页参数
     * @param search 查询参数
     * @return 分页查询结果
     */
    IPage<ParkCarMngTypeWebVo> findByPage(Page<ParkCarMngTypeWebVo> page,
                                          MngTypeListRequest search);

    /**
     * 管理类型记录总数
     *
     * @param search 查询参数
     * @return 管理类型记录总数
     */
    Integer selectCount(MngTypeListRequest search);

    /**
     * 根据车场ID获取车场下的所有车辆管理类型
     *
     * @param parkId 车场ID
     * @return 车辆管理类型列表
     */
    List<ParkCarMngtype> selectParkCarMngTypeByParkId(Long parkId);

    /**
     * 根据车场ID和车辆管理大类获取车辆管理类型
     *
     * @param parkId  车场ID
     * @param mngType 车辆管理大类
     * @return 车辆管理类型
     */
    List<ParkCarMngtype> selectListByParkIdAndMngType(Long parkId, String mngType);
}
